package cn.wolfcode.utils;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import cn.wolfcode.vo.AccessTokenVo;

@Component
public class AccessTokenUtil {

	@Autowired
	private RestTemplate restTemplate;
	
	@Value(value="${wechat.apid}")
	private String appid;
	
	@Value(value="${wechat.appsecret}")
	private String appsecret;
	
	private AccessTokenVo accessToken = null;
	
	/**
	 * 获取access_token
	 */
	public String getAccessToken() {
		Long currentTime = new Date().getTime();
		//判断accessToken是否为null
		if(accessToken == null) {
			//如果为null，发送微信的获取accessToken的接口，从新创建accessToken
		    reloadAccessToken(currentTime);
		}
		//如果不为null，判断之前获取的accessToken是否超过有效期（当前时间  > 创建accessToken的时间+7200秒）
		if(currentTime > accessToken.getCreateAccessToken()+7200*1000) {
			//如果超过有效期，发送微信的获取accessToken的接口，从新创建accessToken
			reloadAccessToken(currentTime);
		}
		//否则，如果还是有效期内，那么就直接返会缓存在应用中的accessToken
		return accessToken.getAccess_token();
	}

	private void reloadAccessToken(Long currentTime) {
		accessToken = restTemplate.getForObject(UrlUtil.GET_ACCESS_TOKEN_URL.replace("APPID", appid).replace("APPSECRET", appsecret), AccessTokenVo.class);
		accessToken.setCreateAccessToken(currentTime);
	}
}








